package jp.sinmetal.trainer.entity;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Version;

import org.seasar.framework.beans.util.Beans;

import twitter4j.User;
import twitter4j.http.AccessToken;


/**
 * メンバーエンティティ
 * @author sin
 *
 */
@Entity
public class Member extends AbstractEntity {

    /**
     * メンバーID
     * @author sin
     */
    @Id
    @GeneratedValue
    @Column(name="member_id")
    public Integer memberId;

    /**
     * ログインID
     * @author sin
     */
    @Column(name="login_id")
    public String loginId;

    /**
     * twitterID
     * @author sin
     */
    @Column(name="twitter_id")
    public Integer twitterId;

    /**
     * 旧twitterID
     * @author sin
     */
    @Column(name="old_twitter_id")
    public String oldTwitterId;

    /**
     * twitter名
     * @author sin
     */
    @Column(name="twitter_name")
    public String twitterName;

    /**
     * twitter表示名
     * @author sin
     */
    @Column(name="twitter_screen_name")
    public String twitterScreenName;

    /**
     * twitterトークン
     * @author sin
     */
    @Column(name="twitter_token")
    public String twitterToken;

    /**
     * twitterアクセストークン
     * @author sin
     */
    @Column(name="twitter_token_secret")
    public String twitterTokenSecret;

    /**
     * twitterプロフィール画像URL
     * @author sin
     */
    @Column(name="twitter_profile_image_url")
    public String twitterProfileImageUrl;

    /**
     * パスワード
     * @author sin
     */
    public String password;

    /**
     * メンバー名
     * @author sin
     */
    @Column(name="member_name")
    public String memberName;

    /**
     * ともだちコード
     * @author sin
     */
    @Column(name="friend_code")
    public String friendCode;

    /**
     * 通信可能時間帯
     * @author sin
     */
    @Column(name="communication_time")
    public String communicationTime;

    /**
     * 削除フラグ
     * @author sin
     */
    @Column(name="delete_flag")
    public Boolean deleteFlag;

    /**
     * 登録日時
     * @author sin
     */
    @Temporal(TemporalType.TIMESTAMP)
    @Column(name="entry_date")
    public Date entryDate;

    /**
     * バージョン
     * @author sin
     */
    @Version
    public Long version;

    //----------- s2jdbc連結定義 ----------

    /**
     * 大会一覧
     * @author sin
     */
    @OneToMany(mappedBy="member")
    public List<Convention> conventions;

    /**
     * 大会参加者一覧
     * @author sin
     */
    @OneToMany(mappedBy="member")
    public List<ConventionMember> conventionMembers;

    //---------- ----------

    /**
     * Twitter情報設定
     * Beans.copyがうまくいかないので、べた書き
     * @author sin
     *
     * @param user
     * @param accessToken
     */
    public void setTwitterInfo(User user, AccessToken accessToken) {
    	this.twitterId = user.getId();
    	this.twitterName = user.getName();
    	this.twitterScreenName = user.getScreenName();
    	this.twitterProfileImageUrl = user.getProfileImageURL().toString();
    	this.twitterToken = accessToken.getToken();
    	this.twitterTokenSecret = accessToken.getTokenSecret();
    }

    /**
     * メンバーエンティティのインスタンスを返す
     * @author sin
     *
     * @param form
     * @return
     */
    public static Member getInstance(Object form) {
    	return Beans.createAndCopy(Member.class, form).dateConverter(DATE_FORMAT).execute();
    }

}